/**
* Copyright 2013 (C) Mr LoNee - (Laurent NICOLAS) - www.mrlonee.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
package com.mrlonee.radialfx.demoutil;
import java.text.DecimalFormat;
import javafx.beans.binding.StringBinding;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty;
import javafx.collections.FXCollections;
import javafx.scene.Node;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.ColorPickerBuilder;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.Slider;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.CircleBuilder;
import javafx.scene.shape.RectangleBuilder;
import javafx.scene.text.Text;
import javafx.scene.text.TextBuilder;
import javafx.util.Callback;
public class DemoUtil extends VBox {
private final DecimalFormat twoDForm = new DecimalFormat("#.##");
public DemoUtil() {
}
public void addAngleControl(final String title, final DoubleProperty prop) {
final Slider slider = addSliderControl(title, prop);
slider.setMin(0);
slider.setMax(360);
}
public void addRadiusControl(final String title, final DoubleProperty prop) {
final Slider slider = addSliderControl(title, prop);
slider.setMin(0);
slider.setMax(500);
}
private Slider addSliderControl(final String title,
final DoubleProperty prop) {
final Slider slider = new Slider();
slider.setValue(prop.get());
prop.bind(slider.valueProperty());
final VBox box = new VBox();
final Text titleText = new Text(title);
titleText.textProperty().bind(new StringBinding() {
{
super.bind(slider.valueProperty());
}
@Override
protected String computeValue() {
return title + " : " + twoDForm.format(slider.getValue());
}
});
box.getChildren().addAll(titleText, slider);
getChildren().add(box);
return slider;
}
public void addColorControl(final String title,
final ObjectProperty<Paint> paintProperty) {
final ColorPicker colorPicker = ColorPickerBuilder.create()
.value((Color) paintProperty.get()).build();
paintProperty.bind(colorPicker.valueProperty());
final VBox box = new VBox();
final Text titleText = new Text(title);
titleText.textProperty().bind(new StringBinding() {
{
super.bind(colorPicker.valueProperty());
}
@Override
protected String computeValue() {
return title + " : " + colorPicker.getValue().toString();
}
});
box.getChildren().addAll(titleText, colorPicker);
getChildren().add(box);
}
public void addBooleanControl(final String title,
final BooleanProperty boolProp) {
final CheckBox check = new CheckBox();
check.setSelected(boolProp.get());
boolProp.bind(check.selectedProperty());
final VBox box = new VBox();
final Text titleText = new Text(title);
titleText.textProperty().bind(new StringBinding() {
{
super.bind(check.selectedProperty());
}
@Override
protected String computeValue() {
return title + " : "
+ String.valueOf(check.selectedProperty().get());
}
});
box.getChildren().addAll(titleText, check);
getChildren().add(box);
}
public void addGraphicControl(final String title,
final ObjectProperty<Node> graphicProperty) {
final Node circle = CircleBuilder.create().radius(4).fill(Color.ORANGE).build();
final Node square = RectangleBuilder.create().width(8).height(8).build();
final Node text = TextBuilder.create().text("test").build();
final ComboBox<Node> choices = new ComboBox<Node>(FXCollections.observableArrayList(circle, square, text));
choices.setCellFactory(new Callback<ListView<Node>, ListCell<Node>>() {
@Override
public ListCell<Node> call(final ListView<Node> param) {
final ListCell<Node> cell = new ListCell<Node>() {
@Override
public void updateItem(final Node item, final boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item.getClass().getSimpleName());
} else {
setText(null);
}
}
};
return cell;
}
});
choices.getSelectionModel().select(0);
graphicProperty.bind(choices.valueProperty());
final VBox box = new VBox();
final Text titleText = new Text(title);
titleText.textProperty().bind(new StringBinding() {
{
super.bind(choices.selectionModelProperty());
}
@Override
protected String computeValue() {
return title + " : "
+ String.valueOf(choices.selectionModelProperty().get().getSelectedItem().getClass().getSimpleName());
}
});
box.getChildren().addAll(titleText, choices);
getChildren().add(box);
}
}